<?php
$txt='';
//步骤

//第一步
//第二步：验证格式
//第三步：验证大小
//第四步：验证是否是http上传
//第五步：上传实现
function check()
{
    //1.验证是否有误
    if ($_FILES['image']['error'] != 0) {
        switch ($_FILES['image']['error']) {
            case 1:
                return "文件大小超过了php.ini中允许的最大值";
            case 2:
                return "文件大小超过了表单允许的最大值";
            case 3:
                return "只有部分文件上传";
            case 4:
                return "没有文件上传";
            case 6:
                return "找不到临时文件";
            case 7:
                return "文件写入失败";
        }
    }
    // 2。验证格式
    $allow = array('image/jpeg', 'image/png', 'image/gif');
    // 创建一个fileinfo资源
    $info = finfo_open(FILEINFO_MIME_TYPE);
    // 将finfo资源和文件做比较
    $min = finfo_file($info, $_FILES['image']['tmp_name']);
    //数组转字符串
    // $strallow=implode($allow);
    // return in_array($min,$allow)?"":"只能上传 {$strallow} 的格式文件";
    if(!in_array($min,$allow)){
        return "只能上传".implode(",",$allow)."的格式文件";
    }
    //3.验证大小
    $size=3323456;
    $k=1024;
    // var_dump($_FILES);
    if($_FILES['image']['size']>$size){
        return "文件不能超过".$size/$k."k";
    }
    //4.验证是否是http上传
    if(is_uploaded_file($_FILES['image']['tmp_name'])){
        //5.上传实现
        $path = uniqid('user') . rand(100, 500) . $_FILES['image']['name'];
        // 将文件上传到upload
        // move_uploaded_file($_FILES['image']['tmp_name'], './upload/' . $path);
        return '上传成功';
    }else{
        return "文件不是HTTP POST上传的<br>";
    }
}
if (!empty($_POST)) {
    $txt= check($_FILES['image']);
}
?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <span>优化文件格式验证</span>
    <form action="" method="post" enctype="multipart/form-data">
        <!-- <input type="hidden" name="MAX_FILE_SIZE" value='2'> -->
        <input type="file" name='image'>
        <input type="submit" name='sub' value="上传">
    </form>
    <div>
    <?php echo $txt?>
    </div>
</body>
</body>

</html>